<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>原型规则</title>
</head>
<body>
<script>
    // 所有的引用类型(数组,对象,函数),都具有对象特性,可自由扩展属性(null除外),都有一个__proto__(隐式原型)属性,属性值是普通对象
    // 所有的引用类型(数组,对象,函数),它的__proto__指向构造函数的'prototype'属性值
      var obj = {}
      obj.a = 100
      console.log(obj.__proto__ === Object.prototype)

  function fn (){

  }
  console.log(obj.__proto__)
  /*
    所有的函数,都有一个prototype(显式原型)属性,属性值也是一个普通对象
  */
  /*
    当试图得到一个对象的某个属性,这个对象本身没有这个属性,就会去他的__proto__中寻找
  */
  function Foo(name,age){
    this.name = name;
  }
  Foo.prototype.alertName = function() {
    console.log(this.name + '====')
  }
  var f = new Foo("zhangsan")
  f.printName = function(){
    console.log(this.name)
  }

  f.printName()
  f.alertName()
  f.toString()

    var arr = [];
//    arr.__proto__ = {
//        addClass:function () {
//            console.log(333)
//        }
//    }
    console.log(arr instanceof  Array)
</script>
</body>
</html>